//引用express框架
const express = require('express');
const path = require('path');

//引入body-parser
const bodyPaser = require('body-parser');

//导入express-session
const session = require('express-session');

//导入art-template模板引擎
const template = require('art-template');
//导入dateFormat第三方模块对日期处理
const dateFormat = require('dateformat');

//导入morgan
const morgan = require('morgan');
//环境配置
const config = require('config');

//创建网站服务器
const app = express();

//数据库连接
require('./model/connect');
//require('./model/user');

//处理post请求参数
app.use(bodyPaser.urlencoded({extended: false}));//false会使用官方的内部解析，true会使用第三方

//配置session并设置session加密密码
app.use(session({
    secret: 'secret key',
    saveUninitialized: false
    // cookie: {
    //     maxAge: 24 * 60 * 60 * 1000 //设置cookies的过期时间毫秒
    // }
}));


//告诉express框架模板所在的位置
app.set('views', path.join(__dirname, 'views'));
//告诉express框架模板的默认后缀是什么
app.set('view engine', 'art');
//当渲染后缀为art的模板时 所使用的模板引擎是什么
app.engine('art', require('express-art-template'));//express运行一个项目有多个模板渲染

//向模板导入外部变量
template.defaults.imports.dateFormat = dateFormat;


//开放静态资源文件
app.use(express.static(path.join(__dirname, 'public')));//__dirname返回当前的绝对路径

//console.log(config.get('title'));

//获取系统环境变量
if (process.env.NODE_ENV == 'development') {
    console.log("开发环境");
    //在开发环境将客户端发送到服务器的信息打印到控制台中
    app.use(morgan('dev'));
} else {
    console.log("生产环境");
}


//引入路由模块
const home = require('./route/home');
const admin = require('./route/admin');



//登录拦截
app.use('/admin', require('./middleware/loginGuard'));

//为路由匹配请求路径
app.use('/home', home);
app.use('/admin', admin);

//错误处理
app.use((err, req, res, next) => {
    //err即为next参数传过来的东西
    const result = JSON.parse(err);
    //多个参数拼接
    let params = [];
    for (let attr in result) {
        if (attr != 'path') {
            params.push(attr + '=' + result[attr]);
        }
    }
    res.redirect(`${result.path}?${params.join('&')}`);

});

//404处理
app.use((req,res)=>{
    res.redirect('/home/');
});

//监听端口
app.listen(80);
